﻿#ifndef VIRTUALSEARCH_H
#define VIRTUALSEARCH_H

#include <QObject>
#include"data.h"
enum Distance{
    //欧氏距离,曼哈顿距离,切比雪夫距离
    OSJL=1,
    MHDJL,
    QBXFJL,
};


class VirtualSearch : public QObject
{//搜索的抽象类
    Q_OBJECT
public:
    explicit VirtualSearch(QObject *parent = nullptr);

    //设置地图
    virtual void setMap(Map*map0) = 0;
    //设置欧氏距离、曼哈顿距离和切比雪夫距离
    virtual void setDistance(int distance0) = 0;

//slots:
    //单步搜索
    virtual void step() = 0;
    //连续搜索
    virtual void Continuous() = 0;
    //终止搜索
    virtual void stop() = 0;


signals:
    //单步搜索完成(成功1/失败0)
    void completed(bool);
    //全部搜索完成(成功1/失败0)
    void finished(bool);
    //输出搜索结果(要显示的节点的坐标，前驱节点坐标（不存在则为{-1，-1}），状态（OPEN、SEAL），信息（G、H、F的值）)
    void output(Point coordinate,Point pre,int flag,QString);
    //输出搜索到的路径
    void result(QVector<Point>);
    //其它输出请自行添加

protected:
    Map*map;
    int distance;
};

#endif // VIRTUALSEARCH_H
